package net;

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

/**
 *UDP网络通信编程-发送端
 */
public class UDPSenderB {
    public static void main(String[] args) throws Exception {

        //1.创建DatagramSocket对象，准备在9998端口接收数据
        DatagramSocket socket = new DatagramSocket(9998);

        //2.将需要发送的数据，封装到 DatagramPacket 对象
        byte[] data = "hello 明天吃火锅~".getBytes();
        //封装的 DatagramPacket(data, length, host, port)
        DatagramPacket packet =
                new DatagramPacket(data, data.length, InetAddress.getByName("127.0.0.1"), 9999);
        socket.send(packet);

        //3.接收从A端回复的信息
        //构建一个DatagramPacket对象，准备接收数据
        //  一个数据包最大是64K
        byte[] buf = new byte[1024];
        packet = new DatagramPacket(buf, buf.length);

        //4.调用接收方法将通过网络传输的 DatagramPacket对象
        //  填充到 packet对象
        //当有数据包发送到本机9999端口时，就会接收到数据
        //如果没有数据包发送到9999端口时，就会阻塞等待
        socket.receive(packet);

        //5.把packet进行拆包
        int length = packet.getLength();    //实际接收的数据的字节长度
        data = packet.getData();

        String message = new String(data, 0, length);
        System.out.println(message);

        //6.关闭资源
        socket.close();
        System.out.println("B端退出...");
    }
}
